package cn.infrabase.core.util;

import cn.infrabase.core.lang.PatternPool;

import javax.annotation.Nullable;
import java.util.regex.Pattern;

/**
 * 正则工具类。
 *
 * @author Weimin Gao
 * @since 1.0.0
 **/
public class RegexUtils {


    /**
     * <pre>
     * 检查给定的正则及内容是否匹配。
     * 说明：
     * 1、如果给定的内容为null时则返回false。
     * 2、如果给定的正则为null或者""时则返回true。
     * </pre>
     *
     * @param regex   给定的正则。
     * @param content 给定的内容。
     * @return 真表示匹配。
     */
    public static boolean isMatch(@Nullable String regex, @Nullable CharSequence content) {
        if (content == null) {
            // 提供null的字符串为不匹配
            return false;
        }
        if (StringUtils.isEmpty(regex)) {
            // 正则不存在则为全匹配
            return true;
        }
        final Pattern pattern = PatternPool.get(regex, Pattern.DOTALL);
        return isMatch(pattern, content);
    }

    /**
     * <pre>
     * 检查给定的正则及内容是否匹配。
     * 说明：
     * 1、如果给定的内容或正则为null值时则返回false。
     * </pre>
     *
     * @param pattern 给定的正则。
     * @param content 给定的内容。
     * @return 真表示匹配。
     */
    public static boolean isMatch(@Nullable Pattern pattern, @Nullable CharSequence content) {
        if (content == null || pattern == null) {
            return false;
        }
        return pattern.matcher(content).matches();
    }

}
